﻿/******************************************************************************
    myBoard is a port of MacOS X dashboard application for windows.
    Copyright (C) 2007,2008  by Yann ALET
    Email : yann.alet@gmail.com

    myBoard is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    myBoard is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
****************************************************************************/

using System;
using System.IO;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using myBoard.Tools;
using System.Windows.Interop;
using System.Diagnostics;

namespace myBoard.App.Portfolio
{
	public partial class Portfolio
	{
        ISection _currentSection;
        WelcomeSection _welcomeSection;
        Contact _contactSection;
        ProjectsSection _projectsSection;
        Storyboard _transitionStoryboard;
        public event EventHandler PortfolioClosed;
        public event EventHandler CloseMyBoardRequested;

		public Portfolio()
		{
			this.InitializeComponent();

            if (!((Environment.OSVersion.Version.Major >= 6) && DwmApi.DwmIsCompositionEnabled()))
            {
                base.AllowsTransparency = true;
            }

            _transitionStoryboard = this.FindResource("TransitionEffect") as Storyboard;            
            this.Loaded += new RoutedEventHandler(Portfolio_Loaded);
            _contactLink.Click += new RoutedEventHandler(_contactLink_Click);
            _homeLink.Click += new RoutedEventHandler(_homeLink_Click);
            _projectsLink.Click += new RoutedEventHandler(_projectsLink_Click);
            _closeBut.Click += new RoutedEventHandler(_closeBut_Click);
            this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
        }

        void _closeBut_Click(object sender, RoutedEventArgs e)
        {
            if (PortfolioClosed != null)
            {
                PortfolioClosed(this, null);
                this.WindowState = WindowState.Minimized;
            }
        }

        public void ShowPortfolio()
        {
            if (this.WindowState == WindowState.Minimized)
                this.WindowState = WindowState.Normal;
            else
                this.Show();
        }

        #region Events

        void _projectsLink_Click(object sender, RoutedEventArgs e)
        {
            if (_projectsSection == null)
            {
                _projectsSection = new ProjectsSection();
                _sectionsHost.Children.Add(_projectsSection);
            }

            Goto(_projectsSection);
        }

        void _homeLink_Click(object sender, RoutedEventArgs e)
        {
            if (_welcomeSection == null)
            {
                _welcomeSection = new WelcomeSection();
                _sectionsHost.Children.Add(_welcomeSection);
            }

            Goto(_welcomeSection);
        }

        void _contactLink_Click(object sender, RoutedEventArgs e)
        {
            if (_contactSection == null)
            {
                _contactSection = new Contact();
                _sectionsHost.Children.Add(_contactSection);
                _contactSection.CloseRequested += new EventHandler(_contactSection_CloseRequested);
            }

            Goto(_contactSection);
        }                

        void Portfolio_Loaded(object sender, RoutedEventArgs e)
        {
            _homeLink_Click(sender, e);
        }

        void _contactSection_CloseRequested(object sender, EventArgs e)
        {
            CloseMyBoardRequested(sender, e);
            this.Close();
        }

        #endregion

        #region Overrides

        protected override void OnSourceInitialized(EventArgs e)
        {
            base.OnSourceInitialized(e);

            // We let Aero handle transparency for better performances ...

            if ((Environment.OSVersion.Version.Major >= 6) && Tools.DwmApi.DwmIsCompositionEnabled())
            {
                WindowInteropHelper helper = new WindowInteropHelper(this);
                base.Background = Brushes.Transparent;
                HwndSource.FromHwnd(helper.Handle).CompositionTarget.BackgroundColor = Colors.Transparent;
                Tools.DwmApi.DwmExtendFrameIntoClientArea(helper.Handle, new Tools.DwmApi.MARGINS(-1, -1, -1, -1));
            }
        }

        #endregion

        #region Methods

        private void Goto(ISection section)
        {
            _transitionStoryboard.CurrentTimeInvalidated += delegate(Object o, EventArgs e)
            {
                if (((ClockGroup)o).CurrentProgress > 0.5)
                {
                    foreach (UIElement uiElement in _sectionsHost.Children)
                    {
                        if(uiElement is ISection)
                            ((UIElement)uiElement).Visibility = Visibility.Collapsed;
                    }
                    
                    ((UIElement)section).Visibility = Visibility.Visible;                    

                }
            };

            _transitionStoryboard.Completed += delegate(Object o, EventArgs e)
            {
                Storyboard highlightOn = _homeLink.Template.Resources["HighlightOn"] as Storyboard;
                Storyboard highlightOff = _homeLink.Template.Resources["HighlightOff"] as Storyboard;
                if (section is WelcomeSection)
                {
                    ((FrameworkElement)VisualTreeHelper.GetChild(_homeLink, 0)).BeginStoryboard(highlightOn);
                    ((FrameworkElement)VisualTreeHelper.GetChild(_contactLink, 0)).BeginStoryboard(highlightOff);
                    ((FrameworkElement)VisualTreeHelper.GetChild(_projectsLink, 0)).BeginStoryboard(highlightOff);
                }
                else if (section is Contact)
                {
                    ((FrameworkElement)VisualTreeHelper.GetChild(_contactLink, 0)).BeginStoryboard(highlightOn);
                    ((FrameworkElement)VisualTreeHelper.GetChild(_homeLink, 0)).BeginStoryboard(highlightOff);
                    ((FrameworkElement)VisualTreeHelper.GetChild(_projectsLink, 0)).BeginStoryboard(highlightOff);
                }
                else if (section is ProjectsSection)
                {
                    ((FrameworkElement)VisualTreeHelper.GetChild(_projectsLink, 0)).BeginStoryboard(highlightOn);
                    ((FrameworkElement)VisualTreeHelper.GetChild(_homeLink, 0)).BeginStoryboard(highlightOff);
                    ((FrameworkElement)VisualTreeHelper.GetChild(_contactLink, 0)).BeginStoryboard(highlightOff);
                }
                
            };

            this.BeginStoryboard(_transitionStoryboard);
        }

        #endregion

    }
}